Soru & Cevap

Android AsyncTask ile veritabanı okuma

06.09.2014 - 03:35

Merhaba arkadaşlar,

Kendi oluşturduğum veritabanını android programıma okuttum ve autocomplete textview ile ekrana gösterebiliyorum ancak ekranda çıkarken uygulama ağırlaşmaya başladı. bende ana ekranda "veriler yükleniyor.."  gibi bir başlıkla arkaplanda veriyi yüklemeyi amaçladım. AsyncTask ile bu mümkünmüş ama veriyi okuma işlemini doInBackground a atamadım. yardımcı olabilir misiniz?

//kendi veritabanımın mainactivity read olayı

veritabani = new Veritabani(this);
        try {
            veritabani.createDataBase();
        } catch (IOException ioe) {
            throw new Error("Unable to create database");
        }
        SQLiteDatabase db = veritabani.getReadableDatabase();
        Cursor cursor = db.query("bilgi", SELECT, "", null, null, null, null);
        
        while (cursor.moveToNext()) {

            String kitapadi = cursor.getString(cursor.getColumnIndex("isim"));
            degiskenler.array.add(kitapadi);
        }

 

yukarıdaki kodu asyntask'a atarsam veritabani(this) kodu kırmızı renkte hata veriyor.

sadece yukarıdaki while döngüsünü atmayı başardım hatasız ancak bu seferde uygulama çalışırken stop oldu

 

11 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-2170-1480110808.jpg
serkan.alabas
06.09.2014 - 03:50

Merhabalar,

Aşağıdaki gibi bir global değişken tanımlayınız ;

[code]static Context thisContext;[/code]

Sonra 'onCreate' in içinde ;

[code]thisContext = this;[/code]

yapınız.

Son olarak 'veritabani = new Veritabani(this);' olan satırı şöyle değiştiriniz ;

[code]veritabani = new Veritabani(thisContext);[/code]

Sorunun çözülmesi lazım.

Kolay Gelsin.

 

Buse Dedeoğlu
06.09.2014 - 05:46
Program fişek gibi çalışıyor. yazdığın program altın olsun :) teşekkürler...
Serkan ALABAŞ
06.09.2014 - 06:05
'Yazdığın program altın olsun' güzel sözmüş :) Rica ederim :)) İyi çalışmalar..
Ahmet Burak Demirkoparan
06.09.2014 - 07:29
Arkadaş gerekli cevabı vermiş ama bu çözüm aynı Activity içinde yazılmış inner asynctaskta çalışır.AsyncTask yazınca kurucu method(constructor) yazıp her daim orda Context bilgisi isteyin kullanıcıdan.AsyncTask ı execute ederken şu olur artık. new HerhangiBirTask(this).execute(params); gibi İçerde context'e ihtiyaç duyacağınız bir işlemde çok yararı olur
Ahmet Burak Demirkoparan
06.09.2014 - 07:32
Ayrıca olabildiğince static değişkenlerden kaçmanızı öneririm.Javanın çöp toplayıcısı garbage collector bu tarz değişkenleri yok edemez.Zorunlu olmadıkça ve gerekmedikçe kullanmayın bu yüzden.İyi kodlamalar
Serkan ALABAŞ
06.09.2014 - 07:38
Bilgilendirdiğiniz için teşekkürler..